﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _2021_5_20
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 动物
            Animal cat = new Cat();
            Introdute ICat = new Introdute();
            ICat.PrintIntrodute(cat);

            Console.WriteLine();

            Animal eagle = new Eagle();
            Introdute IEagle = new Introdute();
            IEagle.PrintIntrodute(eagle);

            Console.WriteLine();
            #endregion
            #region 编写一个控制台应用程序，接受用户输入的两个整数和一个操作符，以实现对两个整数的加、减、乘、除运算，并显示出计算结果。

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("请输入运算符:");
            char oper = char.Parse(Console.ReadLine());
            Calculat calc;
           
            if ("+-*/".IndexOf(oper) != -1)
            {
                switch (oper)
                {
                    case '+':
                        calc = new CalculatForAdd();
                        break;
                    case '-':
                        calc = new CalculatForSub();
                        break;
                    case '*':
                        calc = new CalculatForMul();
                        break;
                    case '/':
                        calc = new CalculatForDiv();
                        break;
                    default:
                        calc = new Calculat();
                        break;
                }
                Console.WriteLine("请输入第一个数");
                calc.Num1 = int.Parse(Console.ReadLine());
                Console.WriteLine("请输入第二个数");
                calc.Num2 = int.Parse(Console.ReadLine());
                calc.DisplayResult();
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("输入的运算符有误！");
            }
            #endregion
            #region 选择传递实参的类型
            Console.ForegroundColor = ConsoleColor.Blue;

            Calculat calculat = new CalculatForAdd();//此处本应该由用户，决定，但是我懒得打switch了。
            Compute(calculat);

            Console.WriteLine();
            #endregion
            #region 第二题测试
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("选择要计算的图形种类：1、圆 2、正方形");
            int key = int.Parse(Console.ReadLine());
            Shape shape;
            switch (key)
            {
                case 1:
                    shape = new Cicrle();
                    break;
                case 2:
                    shape = new Square();
                    break;
                default:
                    shape = new Shape();
                    break;
            }
            
            GetArea(shape);
            #endregion

        }

        #region 在主类中添加一个方法，形参为父类对象，根据传递实参的类型，调用方法，实现计算和显示结果。
        public static void Compute(Calculat calculat)
        {
            Console.WriteLine("请输入第一个数");
            calculat.Num1 = int.Parse(Console.ReadLine());
            Console.WriteLine("请输入第二个数");
            calculat.Num2 = int.Parse(Console.ReadLine());

            calculat.DisplayResult();
        }
        #endregion

        #region 在主类中添加一个方法，参数类型就是Shape，方法体中，用形参去调用GetArea()方法。
        public static void GetArea(Shape shape)
        {
            
            shape.GetArea();
        }
        #endregion
    }
}
